home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / AlienControl.s < prev    next >
Text File  |  1995-09-12  |  10KB  |  634 lines

  1.  
  2. gotgun: dc.w 0
  3.  
  4.  INCLUDE "ab3:source/NormalAlien.s"
  5. **************************************
  6.  INCLUDE "ab3:source/FlyingScalyBall.s"
  7. **************************************
  8.  INCLUDE "ab3:source/BigUglyAlien.s"
  9. **************************************
  10.  INCLUDE "ab3:source/MutantMarine.s"
  11. **************************************
  12.  INCLUDE "ab3:source/ToughMarine.s"
  13. ASKFORPROT:
  14.  include "ab3:source/askforprot.s"
  15.  
  16. **************************************
  17.  INCLUDE "ab3:source/halfworm.s"
  18. **************************************
  19.  INCLUDE "ab3:source/bigredthing.s"
  20. **************************************
  21.  INCLUDE "ab3:source/tree.s"
  22. **************************************
  23.  INCLUDE "ab3:source/EyeBall.s"
  24. **************************************
  25.  INCLUDE "ab3:source/FlameMarine.s"
  26.  
  27.  
  28. **************************************
  29.  INCLUDE "ab3:source/Robot.s"
  30.  
  31. THISPLRxoff: dc.w 0
  32. THISPLRzoff: dc.w 0
  33.  
  34. ViewpointToDraw:
  35. ; Calculate which side to display:
  36.  
  37.  move.l ObjectPoints,a1
  38.  move.w (a0),d1
  39.  lea (a1,d1.w*8),a1    ; ptr to points 
  40.  
  41.  move.w (a1),oldx
  42.  move.w 4(a1),oldz
  43.  move.w THISPLRxoff,newx
  44.  move.w THISPLRzoff,newz
  45.  move.w #64,speed
  46.  move.w #-60,Range
  47.  movem.l a0/a1,-(a7)
  48.  jsr HeadTowards
  49.  movem.l (a7)+,a0/a1
  50.  
  51.  move.w newx,d0
  52.  sub.w oldx,d0
  53.  move.w newz,d1
  54.  sub.w oldz,d1
  55.  move.w Facing(a0),d3
  56.  move.l #SineTable,a2
  57.  move.w (a2,d3.w),d2
  58.  adda.w #2048,a2
  59.  move.w (a2,d3.w),d3
  60.  
  61.  move.w d0,d4
  62.  move.w d1,d5
  63.  muls d3,d4
  64.  muls d2,d5
  65.  sub.l d5,d4
  66.  muls d3,d1
  67.  muls d2,d0
  68.  add.l d1,d0
  69.  
  70.  tst.l d0
  71.  bgt.s FacingTowardsPlayer
  72. FAP:
  73.  tst.l d4
  74.  bgt.s FAPR
  75.  cmp.l d4,d0
  76.  bgt.s LEFTFRAME
  77.  bra.s AWAYFRAME
  78.  
  79. FAPR:
  80.  neg.l d0
  81.  cmp.l d0,d4
  82.  bgt.s RIGHTFRAME
  83.  bra.s AWAYFRAME
  84.  
  85. FacingTowardsPlayer
  86.  
  87.  tst.l d4
  88.  bgt.s FTPR
  89.  neg.l d4
  90.  cmp.l d0,d4
  91.  bgt.s LEFTFRAME
  92.  bra.s TOWARDSFRAME
  93.  
  94. FTPR:
  95.  cmp.l d0,d4
  96.  bgt.s RIGHTFRAME
  97. TOWARDSFRAME:
  98.  move.l #0,d0
  99.  rts
  100. RIGHTFRAME:
  101.  move.l #1,d0
  102.  rts
  103. LEFTFRAME:
  104.  move.l #3,d0
  105.  rts
  106. AWAYFRAME:
  107.  move.l #2,d0
  108.  rts
  109.  
  110. deadframe: dc.l 0
  111. screamsound: dc.w 0
  112. nasheight: dc.w 0
  113. tempcos: dc.w 0
  114. tempsin: dc.w 0
  115. tempx: dc.w 0
  116. tempz: dc.w 0
  117.  
  118. RunAround:
  119.  
  120.  movem.l d0/d1/d2/d3/a0/a1,-(a7)
  121.  
  122.  move.w oldx,d0
  123.  sub.w newx,d0    ; dx
  124.  asr.w #1,d0
  125.  move.w oldz,d1
  126.  sub.w newz,d1    ; dz
  127.  asr.w #1,d1
  128.  
  129.  move.l ObjectPoints,a1
  130.  move.w (a0),d2
  131.  lea (a1,d2.w*8),a1
  132.  move.w (a1),d2
  133.  sub.w tempx,d2
  134.  move.w 4(a1),d3
  135.  sub.w tempz,d3
  136.  
  137.  muls tempcos,d2
  138.  muls tempsin,d3
  139.  sub.l d3,d2
  140.  
  141.  blt.s headleft
  142.  neg.w d0
  143.  neg.w d1
  144. headleft:
  145.  sub.w d1,newx
  146.  add.w d0,newz
  147.  
  148.  movem.l (a7)+,d0/d1/d2/d3/a0/a1
  149.  rts
  150.  
  151. bbbb: dc.w 0
  152. tsx: dc.w 0
  153. tsz: dc.w 0
  154. fsx: dc.w 0
  155. fsz: dc.w 0
  156.  
  157. SHOOTPLAYER1
  158.  
  159.  move.w oldx,tsx
  160.  move.w oldz,tsz
  161.  move.w newx,fsx
  162.  move.w oldx,fsz
  163.  
  164.  move.w p1_xoff,newx
  165.  move.w p1_zoff,newz
  166.  move.w (a1),oldx
  167.  move.w 4(a1),oldz
  168.  
  169.  move.w newx,d1
  170.  sub.w oldx,d1
  171.  move.w newz,d2
  172.  sub.w oldz,d2
  173.  jsr GetRand
  174.  asr.w #4,d0
  175.  muls d0,d1
  176.  muls d0,d2
  177.  swap d1
  178.  swap d2
  179.  add.w d1,newz
  180.  sub.w d2,newx
  181.  
  182.  move.l p1_yoff,d1
  183.  add.l #15*128,d1
  184.  asr.l #7,d1
  185.  move.w d1,d2
  186.  muls d0,d2
  187.  swap d2
  188.  add.w d2,d1
  189.  ext.l d1
  190.  asl.l #7,d1
  191.  move.l d1,newy
  192.  move.w 4(a0),d1
  193.  ext.l d1
  194.  asl.l #7,d1
  195.  move.l d1,oldy
  196.  
  197.  move.b ObjInTop(a0),StoodInTop
  198.  
  199.  st exitfirst
  200.  move.w #0,extlen
  201.  move.b #$ff,awayfromwall
  202.  move.w #%0000010000000000,wallflags
  203.  move.l #0,StepUpVal
  204.  move.l #$1000000,StepDownVal
  205.  move.l #0,thingheight
  206.  move.l objroom,-(a7)
  207.  movem.l d0-d7/a0-a6,-(a7)
  208.  
  209. .again:
  210.  jsr MoveObject
  211.  tst.b hitwall
  212.  bne.s .nofurther
  213.  move.w newx,d0
  214.  sub.w oldx,d0
  215.  add.w d0,oldx
  216.  add.w d0,newx
  217.  move.w newz,d0
  218.  sub.w oldz,d0
  219.  add.w d0,oldz
  220.  add.w d0,newz
  221.  move.l newy,d0
  222.  sub.l oldy,d0
  223.  add.l d0,oldy
  224.  add.l d0,newy
  225.  bra .again
  226.  
  227. .nofurther:
  228.  
  229.  move.l objroom,backroom
  230.  
  231.  movem.l (a7)+,d0-d7/a0-a6
  232.  move.l (a7)+,objroom
  233.  
  234.  move.l PlayerShotData,a0
  235.  move.w #19,d1
  236. .findonefree2
  237.  move.w 12(a0),d2
  238.  blt.s .foundonefree2
  239.  adda.w #64,a0
  240.  dbra d1,.findonefree2
  241.  
  242.  move.w tsx,oldx
  243.  move.w tsz,oldz
  244.  move.w fsx,newx
  245.  move.w fsz,oldx
  246.  
  247.  rts
  248.  
  249. .foundonefree2:
  250.  
  251.  move.l ObjectPoints,a1
  252.  move.w (a0),d2
  253.  move.w newx,(a1,d2.w*8)
  254.  move.w newz,4(a1,d2.w*8)
  255.  move.b #1,shotstatus(a0)
  256.  move.w #0,shotgrav(a0)
  257.  move.b #0,shotsize(a0)
  258.  move.b #0,shotanim(a0)
  259.  
  260.  move.l backroom,a1
  261.  move.w (a1),12(a0)
  262.  st worry(a0)
  263.  move.l wallhitheight,d0
  264.  move.l d0,accypos(a0)
  265.  asr.l #7,d0
  266.  move.w d0,4(a0)
  267.  
  268.  move.w tsx,oldx
  269.  move.w tsz,oldz
  270.  move.w fsx,newx
  271.  move.w fsz,oldx
  272.  
  273.  rts
  274.  
  275. futurex: dc.w 0
  276. futurez: dc.w 0
  277.  
  278. FireAtPlayer1:
  279.  move.l NastyShotData,a5
  280.  move.w #19,d1
  281. .findonefree
  282.  move.w 12(a5),d0
  283.  blt.s .foundonefree
  284.  adda.w #64,a5
  285.  dbra d1,.findonefree
  286.  
  287.  bra .cantshoot
  288.  
  289. .foundonefree:
  290.  
  291.  move.b #2,16(a5)
  292.  
  293.  move.l #ObjRotated,a6
  294.  move.w (a0),d0
  295.  lea (a6,d0.w*8),a6
  296.  
  297.  move.l (a6),Noisex
  298.  move.w #100,Noisevol
  299.  move.b #1,chanpick
  300.  clr.b notifplaying
  301.  move.b SHOTTYPE,d0
  302.  move.w #0,shotlife(a5)
  303.  move.b d0,shotsize(a5)
  304.  move.b SHOTPOWER,shotpower(a5)
  305.  movem.l a5/a1/a0,-(a7)
  306.  move.b 1(a0),IDNUM
  307.  jsr MakeSomeNoise
  308.  movem.l (a7)+,a5/a1/a0
  309.  
  310.  move.l ObjectPoints,a2
  311.  move.w (a5),d1
  312.  lea (a2,d1.w*8),a2
  313.  move.w (a1),oldx
  314.  move.w 4(a1),oldz
  315.  move.w PLR1_xoff,newx
  316.  move.w PLR1_zoff,newz
  317.  
  318.  jsr CalcDist
  319.  move.w XDIFF1,d6
  320.  muls distaway,d6
  321.  divs SHOTSPEED,d6
  322.  asr.w #4,d6
  323.  add.w d6,newx
  324.  move.w ZDIFF1,d6
  325.  muls distaway,d6
  326.  divs SHOTSPEED,d6
  327.  asr.w #4,d6
  328.  add.w d6,newz
  329.  move.w newx,futurex
  330.  move.w newz,futurez
  331.  
  332.  move.w SHOTSPEED,speed
  333.  move.w #0,Range
  334.  jsr HeadTowards
  335.  
  336.  move.w newx,d0
  337.  sub.w oldx,d0
  338.  move.w newz,d1
  339.  sub.w oldz,d1
  340.  move.w SHOTOFFMULT,d2
  341.  beq.s .nooffset
  342.  
  343.  muls d2,d0
  344.  muls d2,d1
  345.  asr.l #8,d0
  346.  asr.l #8,d1
  347.  add.w d1,oldx
  348.  sub.w d0,oldz
  349.  move.w futurex,newx
  350.  move.w futurez,newz
  351.  jsr HeadTowards
  352.  
  353. .nooffset:
  354.  
  355.  move.w newx,d0
  356.  move.w d0,(a2)
  357.  sub.w oldx,d0
  358.  move.w d0,shotxvel(a5)
  359.  move.w newz,d0
  360.  move.w d0,4(a2)
  361.  sub.w oldz,d0
  362.  move.w d0,shotzvel(a5)
  363.  
  364.  move.l #%100000100000,EnemyFlags(a5)
  365.  move.w 12(a0),12(a5)
  366.  move.w 4(a0),d0
  367.  move.w d0,4(a5)
  368.  ext.l d0
  369.  asl.l #7,d0
  370.  add.l SHOTYOFF,d0
  371.  move.l d0,accypos(a5)
  372.  move.b SHOTINTOP,ObjInTop(a5)
  373.  move.l PLR1_Obj,a2
  374.  move.w 4(a2),d1
  375.  sub.w #20,d1
  376.  ext.l d1
  377.  asl.l #7,d1
  378.  sub.l d0,d1
  379.  add.l d1,d1
  380.  move.w distaway,d0 
  381.   
  382.  move.w SHOTSHIFT,d2
  383.  asr.w d2,d0
  384.  tst.w d0
  385.  bgt.s .okokokok
  386.  moveq #1,d0
  387. .okokokok
  388.  
  389.  divs d0,d1
  390.  move.w d1,shotyvel(a5)
  391.  st worry(a5)
  392.  
  393.  move.l GunData,a6
  394.  moveq #0,d0
  395.  move.b SHOTTYPE,d0 
  396.  asl.w #5,d0
  397.  add.w d0,a6
  398.  move.w 16(a6),shotgrav(a5)
  399.  move.w 18(a6),shotflags(a5)
  400. ; move.w 20(a6),d0
  401. ; add.w d0,shotyvel(a5)
  402.  
  403. .cantshoot
  404.  rts
  405.  
  406.  
  407. SHOOTPLAYER2
  408.  
  409.  move.w oldx,tsx
  410.  move.w oldz,tsz
  411.  move.w newx,fsx
  412.  move.w oldx,fsz
  413.  
  414.  move.w p2_xoff,newx
  415.  move.w p2_zoff,newz
  416.  move.w (a1),oldx
  417.  move.w 4(a1),oldz
  418.  
  419.  move.w newx,d1
  420.  sub.w oldx,d1
  421.  move.w newz,d2
  422.  sub.w oldz,d2
  423.  jsr GetRand
  424.  asr.w #4,d0
  425.  muls d0,d1
  426.  muls d0,d2
  427.  swap d1
  428.  swap d2
  429.  add.w d1,newz
  430.  sub.w d2,newx
  431.  
  432.  move.l p2_yoff,d1
  433.  add.l #15*128,d1
  434.  asr.l #7,d1
  435.  move.w d1,d2
  436.  muls d0,d2
  437.  swap d2
  438.  add.w d2,d1
  439.  ext.l d1
  440.  asl.l #7,d1
  441.  move.l d1,newy
  442.  move.w 4(a0),d1
  443.  ext.l d1
  444.  asl.l #7,d1
  445.  move.l d1,oldy
  446.  move.b ObjInTop(a0),StoodInTop
  447.  
  448.  st exitfirst
  449.  move.w #0,extlen
  450.  move.b #$ff,awayfromwall
  451.  move.w #%0000010000000000,wallflags
  452.  move.l #0,StepUpVal
  453.  move.l #$1000000,StepDownVal
  454.  move.l #0,thingheight
  455.  move.l objroom,-(a7)
  456.  movem.l d0-d7/a0-a6,-(a7)
  457.  
  458. .again:
  459.  jsr MoveObject
  460.  tst.b hitwall
  461.  bne.s .nofurther
  462.  move.w newx,d0
  463.  sub.w oldx,d0
  464.  add.w d0,oldx
  465.  add.w d0,newx
  466.  move.w newz,d0
  467.  sub.w oldz,d0
  468.  add.w d0,oldz
  469.  add.w d0,newz
  470.  move.l newy,d0
  471.  sub.l oldy,d0
  472.  add.l d0,oldy
  473.  add.l d0,newy
  474.  bra .again
  475.  
  476. .nofurther:
  477.  
  478.  move.l objroom,backroom
  479.  
  480.  movem.l (a7)+,d0-d7/a0-a6
  481.  move.l (a7)+,objroom
  482.  
  483.  move.l NastyShotData,a0
  484.  move.w #19,d1
  485. .findonefree2
  486.  move.w 12(a0),d2
  487.  blt.s .foundonefree2
  488.  adda.w #64,a0
  489.  dbra d1,.findonefree2
  490.  
  491.  move.w tsx,oldx
  492.  move.w tsz,oldz
  493.  move.w fsx,newx
  494.  move.w fsz,oldx
  495.  
  496.  rts
  497.  
  498. .foundonefree2:
  499.  
  500.  move.l ObjectPoints,a1
  501.  move.w (a0),d2
  502.  move.w newx,(a1,d2.w*8)
  503.  move.w newz,4(a1,d2.w*8)
  504.  move.b #1,shotstatus(a0)
  505.  move.w #0,shotgrav(a0)
  506.  move.b #0,shotsize(a0)
  507.  move.b #0,shotanim(a0)
  508.  
  509.  move.l backroom,a1
  510.  move.w (a1),12(a0)
  511.  st worry(a0)
  512.  move.l wallhitheight,d0
  513.  move.l d0,accypos(a0)
  514.  asr.l #7,d0
  515.  move.w d0,4(a0)
  516.  
  517.  move.w tsx,oldx
  518.  move.w tsz,oldz
  519.  move.w fsx,newx
  520.  move.w fsz,oldx
  521.  
  522.  rts
  523.  
  524. FireAtPlayer2:
  525.  move.l NastyShotData,a5
  526.  move.w #19,d1
  527. .findonefree
  528.  move.w 12(a5),d0
  529.  blt.s .foundonefree
  530.  adda.w #64,a5
  531.  dbra d1,.findonefree
  532.  
  533.  bra .cantshoot
  534.  
  535. .foundonefree:
  536.  
  537.  move.b #2,16(a5)
  538.  
  539.  move.l #ObjRotated,a6
  540.  move.w (a0),d0
  541.  lea (a6,d0.w*8),a6
  542.  
  543.  move.l (a6),Noisex
  544.  move.w #100,Noisevol
  545.  move.b #1,chanpick
  546.  clr.b notifplaying
  547.  move.b SHOTPOWER,d0
  548.  move.w #0,shotlife(a5)
  549.  move.b d0,shotsize(a5)
  550.  move.b SHOTPOWER,shotpower(a5)
  551.  movem.l a5/a1/a0,-(a7)
  552.  move.b 1(a0),IDNUM
  553.  jsr MakeSomeNoise
  554.  movem.l (a7)+,a5/a1/a0
  555.  
  556.  move.l ObjectPoints,a2
  557.  move.w (a5),d1
  558.  lea (a2,d1.w*8),a2
  559.  move.w (a1),oldx
  560.  move.w 4(a1),oldz
  561.  move.w PLR2_xoff,newx
  562.  move.w PLR2_zoff,newz
  563.  move.w SHOTSPEED,speed
  564.  move.w #0,Range
  565.  jsr HeadTowards
  566.  
  567.  move.w newx,d0
  568.  sub.w oldx,d0
  569.  move.w newz,d1
  570.  sub.w oldz,d1
  571.  move.w SHOTOFFMULT,d2
  572.  beq.s .nooffset
  573.  
  574.  muls d2,d0
  575.  muls d2,d1
  576.  asr.l #8,d0
  577.  asr.l #8,d1
  578.  add.w d1,oldx
  579.  sub.w d0,oldz
  580.  move.w PLR2_xoff,newx
  581.  move.w PLR2_zoff,newz
  582.  jsr HeadTowards
  583.  
  584. .nooffset:
  585.  
  586.  
  587.  move.w newx,d0
  588.  move.w d0,(a2)
  589.  sub.w oldx,d0
  590.  move.w d0,shotxvel(a5)
  591.  move.w newz,d0
  592.  move.w d0,4(a2)
  593.  sub.w oldz,d0
  594.  move.w d0,shotzvel(a5)
  595.  
  596.  move.l #%100000100000,EnemyFlags(a5)
  597.  move.w 12(a0),12(a5)
  598.  move.w 4(a0),d0
  599.  move.w d0,4(a5)
  600.  ext.l d0
  601.  asl.l #7,d0
  602.  add.l SHOTYOFF,d0
  603.  move.l d0,accypos(a5)
  604.  move.b SHOTINTOP,ObjInTop(a5)
  605.  move.l PLR2_Obj,a2
  606.  move.w 4(a2),d1
  607.  sub.w #20,d1
  608.  ext.l d1
  609.  asl.l #7,d1
  610.  sub.l d0,d1
  611.  add.l d1,d1
  612.  move.w distaway,d0
  613.  move.w SHOTSHIFT,d2
  614.  asr.w d2,d0
  615.  tst.w d0
  616.  bgt.s .okokokok
  617.  moveq #1,d0
  618. .okokokok
  619.  divs d0,d1
  620.  move.w d1,shotyvel(a5)
  621.  st worry(a5)
  622.  move.w #0,shotgrav(a5)
  623. .cantshoot
  624.  rts
  625.  
  626. SHOTYOFF: dc.l 0
  627. SHOTTYPE: dc.w 0
  628. SHOTPOWER: dc.w 0
  629. SHOTSPEED: dc.w 0
  630. SHOTOFFMULT: dc.w 0
  631. SHOTSHIFT: dc.w 0
  632. SHOTINTOP: dc.w 0
  633.  
  634. backroom: dc.l 0